from django.db import models


class Produto(models.Model):
    nome = models.CharField(max_length=20, help_text="Nome resumido do produto", unique = True)
    descricao = models.CharField(help_text="Descrição sobre o produto")
    valor = models.PositiveIntegerField()
    unidade = models.CharField(max_length=10, help_text="Unidade de compra (eg.: m²)")
    
    def __unicode__(self):
        return self.nome
    
class Item(models.Model):
    produto = models.ForeignKey(Produto)
    ordem = models.PositiveIntegerField()
    quantidade = models.PositiveIntegerField(verbose_name=u'Quantidade desejada: ')
    quantidade_atendida = models.PositiveIntegerField(default = 0, verbose_name=u'Quantidade atendida: ', max_value=quantidade)
    justificativa = models.CharField(required=True, blank=False, verbose_name=u'Explique o porque da solicitação.')
    is_blocked = models.BooleanField(default=False, verbose_name=u'Está Bloqueado?')
    valor_total = models.IntegerField(default = 0)
    
    def __unicode__(self):
        return "%ix %s" %(self.quantidade, self.nome)
    
    def gera_total(self):
        self.valor_total = self.quantidade_atendida * Item.valor
    
    def bloquear(self):
        self.is_blocked = True
        
    def liberar(self):
        self.is_blocked = False
    
class Solicitacao(models.Model):
    data = models.DateTimeField(auto_now_add=True)
    itens = []
    is_blocked = models.BooleanField(default=False, verbose_name=u'Está Bloqueada?')
    
    def __unicode__(self):
        return self.data
    
    def field_list(self):
        '''
        Aprimorar o retorno de is_blocked, retornar Livre ou Bloquada, ChoiceField?
        '''
        return [('Data Solicitação', self.data),('Qtd Itens', len(self.itens)), ('Permite edição?', not self.is_blocked)]
    
    def adicionar(self, item):
        item.ordem = len(self.itens)+1
        self.itens.append(item)
        
    def remover(self, item):
        if item in self.itens:
            self.itens.pop(self.itens.index(item))
    
    def avaliar(self):
        self.bloquear()
        for item in self.itens:
            item.bloquear()
        
    def liberar(self):
        self.is_blocked = False
    
    def bloquear(self):
        self.is_blocked = True
        
       